package com.yeti.repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.yeti.domain.Role;

@Repository(value = "roleDao")
public class RoleDaoImpl implements RoleDao {

	private static final long serialVersionUID = -192052878294281798L;
	private EntityManager em = null;

    @PersistenceContext
    public void setEntityManager(EntityManager em) {
        this.em = em;
    }

	/**
	 * Metodo que agrega un rol a la lista de roles de la base de datos.
	 * 
	 * @param r: Es el rol a agregar.
	 * @return devuelve true si la operacion se produce correctamente o false en caso contrario.
	 */
	@Override
	@Transactional(readOnly = false)
	public boolean addRole(Role r) {
		try{
			em.persist(r);
		}catch(Exception e){
			System.out.println(e);
			return false;
		}
		return true;
	}
	
	/**
	 * Metodo que obtiene un rol a partir de su nombre.
	 * 
	 * @param name: Es el nombre del rol a buscar.
	 * @return devuelve un rol si el rol buscado existe o null en caso de no existir.
	 */
	@Override
	public Role getRole(String name) {
		try{
			return (Role)em.createQuery("select r from Role r where r.name='"+name+"'").getResultList().get(0);
		}catch(Exception e){
			System.out.println(e);
			return null;
		}
	}
	
}
